package d2_lambda;

public class LambdaTest01 {
    public static void main(String[] args) {
        //目标: 认识Lambda是如何简化匿名内部类的。
       /* Animal a = new Animal() {
            @Override
            public void cry() {
                System.out.println("老虎跑的贼溜");
            }
        };*/
        //错误示范:LLambda并不能简化所有匿名内部类的底阿妈。 只能简化函数式接口的匿名内部类。
//         Animal a = () -> { System.out.println("老虎跑的贼溜");};

        //正确示范
        Swimming s1 = new Swimming() {
            @Override
            public void swim() {
                System.out.println("我有一剑");
            }
        };
        s1.swim();
        //Lambda可以简化函数式接口的匿名内部类
        // 可以上下文推断出真实的代码形式 根据前面的多态,后面的方法体可以推断出
        Swimming s2 = () -> {
            System.out.println("陈平安");
        };
        s2.swim();
    }
}

//函数式接口: 函数式接口中仅有一个抽象方法
@FunctionalInterface //------->跟那个重写校验符差不多
interface Swimming {
    void swim();
}

//抽象类(首先不是接口)
abstract class Animal {
    public abstract void cry();
}
